/*
 * Copyright 2001-2016, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _UNICODEBLOCKOBJECTS_H
#define _UNICODEBLOCKOBJECTS_H


#include <Font.h>


// Unicode block list with their unicode encoding range
//
// Original BeOS-compatible blocks
const unicode_block B_BASIC_LATIN_BLOCK(					/* 0000 - 007F			*/	0x0000000000000000LL, 0x0000000000000001LL);
const unicode_block B_LATIN1_SUPPLEMENT_BLOCK(				/* 0080 - 00FF			*/	0x0000000000000000LL, 0x0000000000000002LL);
const unicode_block B_LATIN_EXTENDED_A_BLOCK(				/* 0100 - 017F			*/	0x0000000000000000LL, 0x0000000000000004LL);
const unicode_block B_LATIN_EXTENDED_B_BLOCK(				/* 0180 - 024F			*/	0x0000000000000000LL, 0x0000000000000008LL);
const unicode_block B_IPA_EXTENSIONS_BLOCK(					/* 0250 - 02AF			*/	0x0000000000000000LL, 0x0000000000000010LL);
const unicode_block B_SPACING_MODIFIER_LETTERS_BLOCK(		/* 02B0 - 02FF			*/	0x0000000000000000LL, 0x0000000000000020LL);
const unicode_block B_COMBINING_DIACRITICAL_MARKS_BLOCK(	/* 0300 - 036F			*/	0x0000000000000000LL, 0x0000000000000040LL);
const unicode_block B_BASIC_GREEK_BLOCK(					/* 0370 - 03CF			*/	0x0000000000000000LL, 0x0000000000000080LL);
const unicode_block B_GREEK_SYMBOLS_AND_COPTIC_BLOCK(		/* 03D0 - 03FF			*/	0x0000000000000000LL, 0x0000000000000100LL);
const unicode_block B_CYRILLIC_BLOCK(						/* 0400 - 04FF			*/	0x0000000000000000LL, 0x0000000000000200LL);
const unicode_block B_ARMENIAN_BLOCK(						/* 0530 - 058F			*/	0x0000000000000000LL, 0x0000000000000400LL);
const unicode_block B_BASIC_HEBREW_BLOCK(					/* 0590 - 05CF			*/	0x0000000000000000LL, 0x0000000000000800LL);
const unicode_block B_HEBREW_EXTENDED_BLOCK(				/* 05D0 - 05FF			*/	0x0000000000000000LL, 0x0000000000001000LL);
const unicode_block B_BASIC_ARABIC_BLOCK(					/* 0600 - 0670			*/	0x0000000000000000LL, 0x0000000000002000LL);
const unicode_block B_ARABIC_EXTENDED_BLOCK(				/* 0671 - 06FF			*/	0x0000000000000000LL, 0x0000000000004000LL);
const unicode_block B_DEVANAGARI_BLOCK(						/* 0900 - 097F			*/	0x0000000000000000LL, 0x0000000000008000LL);
const unicode_block B_BENGALI_BLOCK(						/* 0980 - 09FF			*/	0x0000000000000000LL, 0x0000000000010000LL);
const unicode_block B_GURMUKHI_BLOCK(						/* 0A00 - 0A7F			*/	0x0000000000000000LL, 0x0000000000020000LL);
const unicode_block B_GUJARATI_BLOCK(						/* 0A80 - 0AFF			*/	0x0000000000000000LL, 0x0000000000040000LL);
const unicode_block B_ORIYA_BLOCK(							/* 0B00 - 0B7F			*/	0x0000000000000000LL, 0x0000000000080000LL);
const unicode_block B_TAMIL_BLOCK(							/* 0B80 - 0BFF			*/	0x0000000000000000LL, 0x0000000000100000LL);
const unicode_block B_TELUGU_BLOCK(							/* 0C00 - 0C7F			*/	0x0000000000000000LL, 0x0000000000200000LL);
const unicode_block B_KANNADA_BLOCK(						/* 0C80 - 0CFF			*/	0x0000000000000000LL, 0x0000000000400000LL);
const unicode_block B_MALAYALAM_BLOCK(						/* 0D00 - 0D7F			*/	0x0000000000000000LL, 0x0000000000800000LL);
const unicode_block B_THAI_BLOCK(							/* 0E00 - 0E7F			*/	0x0000000000000000LL, 0x0000000001000000LL);
const unicode_block B_LAO_BLOCK(							/* 0E80 - 0EFF			*/	0x0000000000000000LL, 0x0000000002000000LL);
const unicode_block B_BASIC_GEORGIAN_BLOCK(					/* 10A0 - 10CF			*/	0x0000000000000000LL, 0x0000000004000000LL);
const unicode_block B_GEORGIAN_EXTENDED_BLOCK(				/* 10D0 - 10FF			*/	0x0000000000000000LL, 0x0000000008000000LL);
const unicode_block B_HANGUL_JAMO_BLOCK(					/* 1100 - 11FF			*/	0x0000000000000000LL, 0x0000000010000000LL);
const unicode_block B_LATIN_EXTENDED_ADDITIONAL_BLOCK(		/* 1E00 - 1EFF			*/	0x0000000000000000LL, 0x0000000020000000LL);
const unicode_block B_GREEK_EXTENDED_BLOCK(					/* 1F00 - 1FFF			*/	0x0000000000000000LL, 0x0000000040000000LL);
const unicode_block B_GENERAL_PUNCTUATION_BLOCK(			/* 2000 - 206F			*/	0x0000000000000000LL, 0x0000000080000000LL);
const unicode_block B_SUPERSCRIPTS_AND_SUBSCRIPTS_BLOCK(	/* 2070 - 209F			*/	0x0000000000000000LL, 0x0000000100000000LL);
const unicode_block B_CURRENCY_SYMBOLS_BLOCK(				/* 20A0 - 20CF			*/	0x0000000000000000LL, 0x0000000200000000LL);
const unicode_block B_COMBINING_MARKS_FOR_SYMBOLS_BLOCK(	/* 20D0 - 20FF			*/	0x0000000000000000LL, 0x0000000400000000LL);
const unicode_block B_LETTERLIKE_SYMBOLS_BLOCK(				/* 2100 - 214F			*/	0x0000000000000000LL, 0x0000000800000000LL);
const unicode_block B_NUMBER_FORMS_BLOCK(					/* 2150 - 218F			*/	0x0000000000000000LL, 0x0000001000000000LL);
const unicode_block B_ARROWS_BLOCK(							/* 2190 - 21FF			*/	0x0000000000000000LL, 0x0000002000000000LL);
const unicode_block B_MATHEMATICAL_OPERATORS_BLOCK(			/* 2200 - 22FF			*/	0x0000000000000000LL, 0x0000004000000000LL);
const unicode_block B_MISCELLANEOUS_TECHNICAL_BLOCK(		/* 2300 - 23FF			*/	0x0000000000000000LL, 0x0000008000000000LL);
const unicode_block B_CONTROL_PICTURES_BLOCK(				/* 2400 - 243F			*/	0x0000000000000000LL, 0x0000010000000000LL);
const unicode_block B_OPTICAL_CHARACTER_RECOGNITION_BLOCK(	/* 2440 - 245F			*/	0x0000000000000000LL, 0x0000020000000000LL);
const unicode_block B_ENCLOSED_ALPHANUMERICS_BLOCK(			/* 2460 - 24FF			*/	0x0000000000000000LL, 0x0000040000000000LL);
const unicode_block B_BOX_DRAWING_BLOCK(					/* 2500 - 257F			*/	0x0000000000000000LL, 0x0000080000000000LL);
const unicode_block B_BLOCK_ELEMENTS_BLOCK(					/* 2580 - 259F			*/	0x0000000000000000LL, 0x0000100000000000LL);
const unicode_block B_GEOMETRIC_SHAPES_BLOCK(				/* 25A0 - 25FF			*/	0x0000000000000000LL, 0x0000200000000000LL);
const unicode_block B_MISCELLANEOUS_SYMBOLS_BLOCK(			/* 2600 - 26FF			*/	0x0000000000000000LL, 0x0000400000000000LL);
const unicode_block B_DINGBATS_BLOCK(						/* 2700 - 27BF			*/	0x0000000000000000LL, 0x0000800000000000LL);
const unicode_block B_CJK_SYMBOLS_AND_PUNCTUATION_BLOCK(	/* 3000 - 303F			*/	0x0000000000000000LL, 0x0001000000000000LL);
const unicode_block B_HIRAGANA_BLOCK(						/* 3040 - 309F			*/	0x0000000000000000LL, 0x0002000000000000LL);
const unicode_block B_KATAKANA_BLOCK(						/* 30A0 - 30FF			*/	0x0000000000000000LL, 0x0004000000000000LL);
const unicode_block B_BOPOMOFO_BLOCK(						/* 3100 - 312F			*/	0x0000000000000000LL, 0x0008000000000000LL);
const unicode_block B_HANGUL_COMPATIBILITY_JAMO_BLOCK(		/* 3130 - 318F			*/	0x0000000000000000LL, 0x0010000000000000LL);
const unicode_block B_CJK_MISCELLANEOUS_BLOCK(				/* 3190 - 319F			*/	0x0000000000000000LL, 0x0020000000000000LL);
const unicode_block B_ENCLOSED_CJK_LETTERS_AND_MONTHS_BLOCK(/* 3200 - 32FF			*/	0x0000000000000000LL, 0x0040000000000000LL);
const unicode_block B_CJK_COMPATIBILITY_BLOCK(				/* 3300 - 33FF			*/	0x0000000000000000LL, 0x0080000000000000LL);
const unicode_block B_HANGUL_BLOCK(							/* AC00 - D7AF			*/	0x0000000000000000LL, 0x0100000000000000LL);
const unicode_block B_HIGH_SURROGATES_BLOCK(				/* D800 - DBFF			*/	0x0000000000000000LL, 0x0200000000000000LL);
const unicode_block B_LOW_SURROGATES_BLOCK(					/* DC00 - DFFF			*/	0x0000000000000000LL, 0x0400000000000000LL);
const unicode_block B_CJK_UNIFIED_IDEOGRAPHS_BLOCK(			/* 4E00 - 9FFF			*/	0x0000000000000000LL, 0x0800000000000000LL);
const unicode_block B_PRIVATE_USE_AREA_BLOCK(				/* E000 - F8FF			*/	0x0000000000000000LL, 0x1000000000000000LL);
const unicode_block B_CJK_COMPATIBILITY_IDEOGRAPHS_BLOCK(	/* F900 - FAFF			*/	0x0000000000000000LL, 0x2000000000000000LL);
const unicode_block B_ALPHABETIC_PRESENTATION_FORMS_BLOCK(	/* FB00 - FB4F			*/	0x0000000000000000LL, 0x4000000000000000LL);
const unicode_block B_ARABIC_PRESENTATION_FORMS_A_BLOCK(	/* FB50 - FDFF			*/	0x0000000000000000LL, 0x8000000000000000LL);
const unicode_block B_COMBINING_HALF_MARKS_BLOCK(			/* FE20 - FE2F			*/	0x0000000000000001LL, 0x0000000000000000LL);
const unicode_block B_CJK_COMPATIBILITY_FORMS_BLOCK(		/* FE30 - FE4F			*/	0x0000000000000002LL, 0x0000000000000000LL);
const unicode_block B_SMALL_FORM_VARIANTS_BLOCK(			/* FE50 - FE6F			*/	0x0000000000000004LL, 0x0000000000000000LL);
const unicode_block B_ARABIC_PRESENTATION_FORMS_B_BLOCK(	/* FE70 - FEFE			*/	0x0000000000000008LL, 0x0000000000000000LL);
const unicode_block B_HALFWIDTH_AND_FULLWIDTH_FORMS_BLOCK(	/* FF00 - FFEF			*/	0x0000000000000010LL, 0x0000000000000000LL);
const unicode_block B_SPECIALS_BLOCK(						/* FEFF and FFF0 - FFFF	*/	0x0000000000000020LL, 0x0000000000000000LL);
const unicode_block B_TIBETAN_BLOCK(						/* 0F00 - 0FBF			*/	0x0000000000000040LL, 0x0000000000000000LL);


const unicode_block_range kUnicodeBlockMap[] = {
	{0x0000, 0x007f, B_BASIC_LATIN_BLOCK },
	{0x0080, 0x00ff, B_LATIN1_SUPPLEMENT_BLOCK },
	{0x0100, 0x017f, B_LATIN_EXTENDED_A_BLOCK },
	{0x0180, 0x024f, B_LATIN_EXTENDED_B_BLOCK },
	{0x0250, 0x02af, B_IPA_EXTENSIONS_BLOCK },
	{0x02b0, 0x02ff, B_SPACING_MODIFIER_LETTERS_BLOCK },
	{0x0300, 0x036f, B_COMBINING_DIACRITICAL_MARKS_BLOCK },
	{0x0370, 0x03cf, B_BASIC_GREEK_BLOCK },
	{0x03d0, 0x03ff, B_GREEK_SYMBOLS_AND_COPTIC_BLOCK },
	{0x0400, 0x04ff, B_CYRILLIC_BLOCK },
	{0x0530, 0x058f, B_ARMENIAN_BLOCK },
	{0x0590, 0x05cf, B_BASIC_HEBREW_BLOCK },
	{0x05d0, 0x05ff, B_HEBREW_EXTENDED_BLOCK },
	{0x0600, 0x0670, B_BASIC_ARABIC_BLOCK },
	{0x0671, 0x06ff, B_ARABIC_EXTENDED_BLOCK },
	{0x0900, 0x097f, B_DEVANAGARI_BLOCK },
	{0x0980, 0x09ff, B_BENGALI_BLOCK },
	{0x0a00, 0x0a7f, B_GURMUKHI_BLOCK },
	{0x0a80, 0x0aff, B_GUJARATI_BLOCK },
	{0x0b00, 0x0b7f, B_ORIYA_BLOCK },
	{0x0b80, 0x0bff, B_TAMIL_BLOCK },
	{0x0c00, 0x0c7f, B_TELUGU_BLOCK },
	{0x0c80, 0x0cff, B_KANNADA_BLOCK},
	{0x0d00, 0x0d7f, B_MALAYALAM_BLOCK},
	{0x0e00, 0x0e7f, B_THAI_BLOCK},
	{0x0e80, 0x0eff, B_LAO_BLOCK},
	{0x0f00, 0x0fff, B_TIBETAN_BLOCK},
	{0x10a0, 0x10ff, B_BASIC_GEORGIAN_BLOCK},
	{0x1100, 0x11ff, B_HANGUL_JAMO_BLOCK},
	{0x1e00, 0x1eff, B_LATIN_EXTENDED_ADDITIONAL_BLOCK},
	{0x1f00, 0x1fff, B_GREEK_EXTENDED_BLOCK},
	{0x2000, 0x206f, B_GENERAL_PUNCTUATION_BLOCK},
	{0x2070, 0x209f, B_SUPERSCRIPTS_AND_SUBSCRIPTS_BLOCK},
	{0x20a0, 0x20cf, B_CURRENCY_SYMBOLS_BLOCK},
	{0x20d0, 0x20ff, B_COMBINING_MARKS_FOR_SYMBOLS_BLOCK},
	{0x2100, 0x214f, B_LETTERLIKE_SYMBOLS_BLOCK},
	{0x2150, 0x218f, B_NUMBER_FORMS_BLOCK},
	{0x2190, 0x21ff, B_ARROWS_BLOCK},
	{0x2200, 0x22ff, B_MATHEMATICAL_OPERATORS_BLOCK},
	{0x2300, 0x23ff, B_MISCELLANEOUS_TECHNICAL_BLOCK},
	{0x2400, 0x243f, B_CONTROL_PICTURES_BLOCK},
	{0x2440, 0x245f, B_OPTICAL_CHARACTER_RECOGNITION_BLOCK},
	{0x2460, 0x24ff, B_ENCLOSED_ALPHANUMERICS_BLOCK},
	{0x2500, 0x257f, B_BOX_DRAWING_BLOCK},
	{0x2580, 0x259f, B_BLOCK_ELEMENTS_BLOCK},
	{0x25a0, 0x25ff, B_GEOMETRIC_SHAPES_BLOCK},
	{0x2600, 0x26ff, B_MISCELLANEOUS_SYMBOLS_BLOCK},
	{0x2700, 0x27bf, B_DINGBATS_BLOCK},
	{0x3000, 0x303f, B_CJK_SYMBOLS_AND_PUNCTUATION_BLOCK},
	{0x3040, 0x309f, B_HIRAGANA_BLOCK},
	{0x30a0, 0x30ff, B_KATAKANA_BLOCK},
	{0x3100, 0x312f, B_BOPOMOFO_BLOCK},
	{0x3130, 0x318f, B_HANGUL_COMPATIBILITY_JAMO_BLOCK},
	{0x3190, 0x319f, B_CJK_MISCELLANEOUS_BLOCK},
	{0x3200, 0x32ff, B_ENCLOSED_CJK_LETTERS_AND_MONTHS_BLOCK},
	{0x3300, 0x33ff, B_CJK_COMPATIBILITY_BLOCK},
	{0x4e00, 0x9fff, B_CJK_UNIFIED_IDEOGRAPHS_BLOCK},
	{0xd800, 0xdb7f, B_HIGH_SURROGATES_BLOCK},
	{0xdc00, 0xdfff, B_LOW_SURROGATES_BLOCK},
	{0xe000, 0xf8ff, B_PRIVATE_USE_AREA_BLOCK},
	{0xf900, 0xfaff, B_CJK_COMPATIBILITY_IDEOGRAPHS_BLOCK},
	{0xfb00, 0xfb4f, B_ALPHABETIC_PRESENTATION_FORMS_BLOCK},
	{0xfb50, 0xfdff, B_ARABIC_PRESENTATION_FORMS_A_BLOCK},
	{0xfe20, 0xfe2f, B_COMBINING_HALF_MARKS_BLOCK},
	{0xfe30, 0xfe4f, B_CJK_COMPATIBILITY_FORMS_BLOCK},
	{0xfe50, 0xfe6f, B_SMALL_FORM_VARIANTS_BLOCK},
	{0xfe70, 0xfeff, B_ARABIC_PRESENTATION_FORMS_B_BLOCK},
	{0xff00, 0xffef, B_HALFWIDTH_AND_FULLWIDTH_FORMS_BLOCK},
	{0xfff0, 0xffff, B_SPECIALS_BLOCK}
};

const uint32 kNumUnicodeBlockRanges
	= sizeof(kUnicodeBlockMap) / sizeof(kUnicodeBlockMap[0]);

#endif	// _UNICODEBLOCKOBJECTS_H
